360 Shader
Youtubeに360動画を載せる
立体視シェーダー/Stereoscopic 360
Stereoscopic
こういうやつ
https://gyazo.com/cf8d4be2f9d4759250934eff59b8a6e0
https://www.youtube.com/watch?v=wfP3az9q-iA
https://gyazo.com/a2441e8321b8c73e51ae98ef9095c4e6
unity_StereoEyeIndexを利用して立体視シェーダーを書く
かんがえかた
Youtubeなどで上下2分割のEquirectangle動画を見つけることができる。
この動画をVR視聴したい場合、上下に別れた映像をそれぞれ左右の眼で見られるように割り当てると良い。
uv座標のy値を半分にすると「下半分」が取り出せる。(下半分の座標はyが0.0から0.5の範囲)。
逆に「上半分」はyが0.5から1.0。
unity_StereoEyeIndex(これはUnityシェーダーを扱う場合、標準のcgincから利用できる)は0が左目、1が右目の値となっている。
これらをまとめると、frag()に書く内容は以下のようになる。
code:Stereoscopic.HLSL
// stereoscopic shader
uv.y = 0.5 * (uv.y + unity_StereoEyeIndex);
どうやって観るの?
上のシェーダーを使う場合は、球の内側にテクスチャを貼って、そこに映すようにUnityエディタでシーンを作る。
code:ToPolar.HLSL
float2 uv = float2((atan2(-d.z,d.x) / PI) * 0.5 + 0.5 , 1 - (acos(d.y) / PI));
立体視ではない見え方にすることもシェーダーでできる。
code:HLSL
// 単純に半分を切り捨てる
uv.y *= 0.5;
180動画の場合
code:HLSL
// 横を2倍にする。前に180度の動画が1枚、後ろに180度の動画1枚という状態になる。
uv.x = uv.x * 2; // uv.xは0.0から2.0の状態になる
// 後ろのピクセルを破棄する
clip(1 - uv.x);
// または後ろを黒く塗りつぶす
fixed4(col) * step(uv.x, 1);